package main

import "fmt"

/**
数组的注意事项：
	1 数组的长度是固定的，一旦定义，不能改变，长度属于类型的一部分
	2 Go中数组属值类型，在默认情况下是值传递，因此会进行值拷贝
	3 如想在其它函数中，去修改原来的数组，可以使用引用传递(指针方式)
**/

func main() {

	test()

	//test2()
	test3()
	//test4()
	return
	var arr01 [5]int = [5]int{100, 200, 300, 400, 500}
	test5(arr01)
	fmt.Println(arr01)

	test6(&arr01) // 传入地址
	fmt.Println(arr01)

}

// 如果想要改变则地址传递
func test6(arr *[5]int) {
	arr[0] = 123456
}

// 数组是值传递的
func test5(arr [5]int) {
	arr[0] = 123456
}

// 数组的类型
func test4() {
	var arr = [3]int{100, 200, 300}
	fmt.Printf("数组的类型 %T \n", arr)

	var arr1 = [5]int{100, 200, 300, 1, 2}
	fmt.Printf("数组的类型 %T", arr1)
}

// 数组的使用
func test3() {
	// 第一种
	var arr [5]int = [5]int{11, 11, 11, 11, 11}

	// 第二种
	var arr2 = [5]int{22, 22, 222, 222, 22}

	// 第三种
	var arr3 = [...]int{33, 33, 33, 33, 33, 12, 13}

	// 第四种
	var arr4 = [...]int{2: 222, 1: 111, 3: 333, 10: 555}
	arr4[4] = 666

	arr5 := [...]int{1, 2, 3, 4}

	fmt.Println(arr)
	fmt.Println(arr2)
	fmt.Println(arr3)
	fmt.Println(arr4)
	fmt.Println("arr4的长度：", len(arr4))
	fmt.Println(arr5)

}

func test2() {
	var score [5]int
	for i := 0; i < len(score); i++ {
		fmt.Printf("请输入第%d个分数：", i+1)
		fmt.Scan(&score[i])
	}
	fmt.Println(score)

	// 求和
	sum := 0
	for i := 0; i < len(score); i++ {
		sum += score[i]
	}
	fmt.Println(sum)

	// 用 range 遍历数组求和
	sum = 0
	for _, v := range score {
		sum += v
	}
	fmt.Println(sum)
}

func test() {

	// 数组的定义和初始化
	var arr [3]int
	arr[0] = 100
	arr[1] = 200
	arr[2] = 300

	// 数组的遍历求和
	sum := 0
	for i := 0; i < len(arr); i++ {
		sum += arr[i]
	}
	fmt.Println(sum)

	// 定义数组并初始化5个值
	var arr2 [5]int // = [5]int //{100, 200, 300, 400, 500}
	fmt.Println(arr2)
	fmt.Println(&arr2[0])
	fmt.Printf("arr2的地址为：%p \n", &arr2)
	fmt.Printf("arr2[0]的地址为：%p \n", &arr2[0])
	fmt.Printf("arr2[1]的地址为：%p \n", &arr2[1])
	fmt.Printf("arr2[2]的地址为：%p \n", &arr2[2])
	fmt.Printf("arr2[3]的地址为：%p \n", &arr2[3])
	fmt.Printf("arr2[4]的地址为：%p \n", &arr2[4])

}
